package com.hudson.core.json;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

/**
 * @Author: 渔小鲤
 * @DateTime: 2025/7/6 17:14
 **/
public class JSONUtil {

    // 创建 ObjectMapper 实例（线程安全）
    private static final Gson gson = new Gson();

    public static Gson getGson() {
        return gson;
    }

    /**
     * 将对象转换为 JSON 字符串
     *
     * @param object 需要转换的对象
     * @return JSON 字符串
     */
    public static String toJson(Object object) {
        return gson.toJson(object);
    }

    /**
     * 将 JSON 字符串转换为对象
     *
     * @param json      JSON 字符串
     * @param clazz 转换后的对象类型
     * @return 转换后的对象
     */
    public static <T> T fromJson(String json, Class<T> clazz) {
        try {
            return gson.fromJson(json, clazz);
        } catch (Exception e) {
            throw new RuntimeException("Error converting JSON string to object", e);
        }
    }

    /**
     * 将 JSON 字符串转换为指定泛型类型对象
     *
     * @param json       JSON 字符串
     * @param typeToken  指定泛型类型的 TypeToken
     * @return 转换后的泛型对象
     */
    public static <T> T fromJson(String json, TypeToken<T> typeToken) {
        try {
            return gson.fromJson(json, typeToken.getType());
        } catch (Exception e) {
            throw new RuntimeException("Error converting JSON string to object of type: " + typeToken.getType(), e);
        }
    }
}
